<?php  if (!defined('BASEPATH'))   exit('No direct script access allowed');

class Medecin_Model extends CI_Model {
	private  $monPdo;
	private	 $cmdSelectByNumDept;
	private  $cmdSelectDepts;
	/**
	 * Initialise une instance de la classe Medecin_Model
	 * - Récupère les paramètres de configuration liés au serveur MySql
	 * - Prépare les requêtes SQL qui comportent des parties variables
	 */
	public function __construct() {
		 parent::__construct();
		// demande à charger les paramètres de configuration du fichier models.php
 		$this->config->load("models");
 		$server = $this->config->item("hostname");
 		$bdd = $this->config->item("database");
 		$user = $this->config->item("username");
 		$mdp = $this->config->item("password");
 		$driver = $this->config->item("dbdriver");
 					
 		// ouverture d'une connexion vers le serveur MySql dont la configuration vient d'être chargée
 		try {
 			$this->monPdo = new PDO($driver . ":host=" . $server . ";dbname=" . $bdd, 
								$user, $mdp, 
								array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'UTF8'"));	
 		}
 		catch (Exception $e) {
 			log_message('error', $e->getMessage());
 			throw new Exception("Base de données inaccessible");
 		}
 		// préparation de la requête de sélection d'un médecin à partir de son numéro
 		$query = "select * from medecin where substring(codePostal,1,2) = ?";
 		$this->cmdSelectByNumDept = $this->monPdo->prepare($query);
		$this->cmdSelectByNumDept->setFetchMode(PDO::FETCH_ASSOC);
 		$query = "select distinct substring(codePostal,1,2) as noDept from medecin order by noDept";
 		$this->cmdSelectDepts = $this->monPdo->prepare($query);
		$this->cmdSelectDepts->setFetchMode(PDO::FETCH_ASSOC);
	}
	/**
	 * Retourne l'ensemble des départements sous forme d'un tableau d'entiers.
	 *
	 * @return array tableau d'objets médecins (propriétés objet = colonnes table)
	 */
	public function get_depts() {
		$this->cmdSelectDepts->execute();
		$lignes = $this->cmdSelectDepts->fetchAll();
		$this->cmdSelectDepts->closeCursor();
		return $lignes;
	}		
	/**
	 * Retourne l'ensemble des médecins d'un département spécifié sous forme de tableaux d'objets medecins
	 *
	 * @return array tableau d'objets médecins (propriétés objet = colonnes table)
	 */
	public function get_all_bydept($numDept) {
		$this->cmdSelectByNumDept->execute(array($numDept));
		$lignes = $this->cmdSelectByNumDept->fetchAll();
		$this->cmdSelectByNumDept->closeCursor();
		return $lignes;
	}
}
?>